package main

/*
什么是panic？
处理Go中程序异常情况的惯用方法是使用错误。对于程序中出现的大多数异常情况，错误就足够了。
但是在某些情况下程序不能简单地在异常情况下继续执行。在这种情况下，
我们使用panic 来终止程序。当函数遇到 panic 时，将停止执行，执行所有 deferred 函数，
然后程序返回其调用函数。此过程一直持续到当前 goroutine 的所有函数都返回，此时程序打印出 panic 消息，
然后是堆栈跟踪，然后终止。当我们编写一个示例程序时，这个概念会更加清晰。
使用 recover 可以重新控制 panic 程序，本教程稍后将对此进行讨论。
panic 和 recover 可以被认为类似于其他语言中的 try-catch-finally，但它很少使用，但使用时更优雅，代码更干净。

*什么时候该使用panic？
一个重要的点是我们应该避免 panic 和 recover 。
尽可能地使用 errors。只有在程序无法继续执行的情况下，才应该使用 panic 和recover 机制。

panic有两个有效的用例
一个不可恢复的错误，程序不能简单地继续执行它。

比如Web服务器无法绑定到所需端口。在这种情况下，panic 才是合理的，因为如果端口绑定本身失败没有别的办法。
来自程序员的错误。
假设我们有一个方法它接受一个指针作为参数。有人用 nil 作为参数调用这个方法。
在这种情况下，我们可能会 panic，因为调用一个带有nil参数的方法是程序员的错误，因为该方法期望得到一个有效指针。
*/
